import { MenuDataItem } from './menu'

export type WithFalse<T> = T | false

export type PureSettings = {
  /**
   * @name layout 的布局方式
   * @type  'side' | 'top' | 'mix'
   *
   * @example 顶部菜单 layout="top"
   * @example 侧边菜单 layout="side"
   * @example 混合布局 既有顶部也有侧边 layout="mix"
   */
  layout?: 'side' | 'top' | 'mix'

  /** 固定顶部栏 */
  fixedHeader?: boolean
  /** 固定侧边栏 */
  fixSiderbar?: boolean
  /**
   * @name menu 相关的一些配置，可以配置菜单的行为
   *
   * @example 关闭菜单国际化  menu={{ locale: false }}
   * @example 默认打开所有的菜单 menu={{ defaultOpenAll:true }}
   * @example 让菜单处于loading 状态 menu={{ loading: true }}
   * @example 异步加载菜单数据 menu={{params:{ pathname } request: async (params) => { return [{name:"主页",path=params.pathname}]} }}
   * @example 使用 MenuGroup 来聚合菜单 menu={{ mode: 'group' }}
   * @example 取消自动关闭菜单 menu={{ autoClose: false }}
   * @example 忽略收起时自动关闭菜单 menu={{ ignoreFlatMenu: true }}
   */
  menu?: {
    /**
     * @name 菜单国际化的配置
     */
    locale?: boolean
    hideMenuWhenCollapsed?: boolean
    /**
     * 收起时也展示标题
     */
    collapsedShowTitle?: boolean
    /**
     * 收起时也展示 分组菜单的标题
     */
    collapsedShowGroupTitle?: boolean
    /**
     * @name 默认打开所有的菜单
     */
    defaultOpenAll?: boolean
    /**
     * @name 是否忽略用户手动折叠过的菜单状态，如选择忽略，折叠按钮切换之后也可实现展开所有菜单
     */
    ignoreFlatMenu?: boolean

    /**
     * @name 菜单的 loading 配置
     */
    loading?: boolean
    /**
     * @name 菜单的 loading 发生改变
     */
    onLoadingChange?: (loading?: boolean) => void

    /**
     * @name 菜单远程请求时用的参数，只有 params 变化才会重新触发 request
     *
     */
    params?: Record<string, any>

    /**
     * @name 菜单远程请求的方法，只有 params 变化才会重新触发 request
     */
    request?: (
      params: Record<string, any>,
      defaultMenuData: MenuDataItem[],
    ) => Promise<MenuDataItem[]>

    /**
     * @name 菜单聚合的模式
     */
    type?: 'sub' | 'group'
    /**
     * @name 取消自动关闭菜单
     */
    autoClose?: false
  }
  /**
   * 设置为 false，在 layout 中只展示 pageName，而不是 pageName - title
   *
   * @name Layout 的 title，也会显示在浏览器标签上
   */
  title?: string | false

  /** @name 主色 */
  colorPrimary?: string

  /** @name 全局增加滤镜 */
  colorWeak?: boolean
  /**
   * 只在 mix 模式下生效
   *
   * @name 切割菜单
   */
  splitMenus?: boolean
  /**
   * @name 在菜单为空时隐藏Sider
   */
  suppressSiderWhenMenuEmpty?: boolean
  /**
   * 侧边菜单模式
   */
  siderMenuType?: 'sub' | 'group'
}
